微信开发笔记[0]:搭建开发测试环境

概况:

  • 本地开发机 win7 ,计算机名:FALCON-PC ,公司内网无法进行80端口映射.已安装 nginx+php+mysql

  • 外网测试机环境为centos6.4,主机名cpp65 。已安装nginx

  • 使用域名 65.hihoku.com 进行开发测试,A记录已指向cpp65

搭建目标:

  • 微信服务器能直接与本地开发机通讯,本地开发即时看到调试效果

原理和实现:

  • 由于微信服务器不能直接访问内网的开发机,所以先让微信服务器访问外网测试主机,测试主机通过ssh隧道将请求转发至开发机,取得开发机响应的数据后,再返回给微信服务器。

  • SSH Forward 远程端口转发(S2C模式)+ nginx反向代理

实施步骤:

Step1: @ win7 给nginx 增加一条配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
server {
        listen       80;
        server_name  65.hihoku.com;
        set $generater "wordpress";
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
          root   F:/kuaipan/hihoku/65.hihoku.com;
          index  index.php index.html index.htm;
          try_files $uri $uri/ /index.php;  
        }
 
 
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        location ~ \.php$ {
            root   F:/kuaipan/hihoku/65.hihoku.com;
            fastcgi_pass localhost:9000;
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param XGEN $generater;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }
 
 
    }
#server 65.hihoku.com end}

在web根目录下F:/kuaipan/hihoku/65.hihoku.com,新建index.php,写入内容:
1
<?php phpinfo();?>

nginx -t 测试没有问题后 重启nginx

Step2: @win7 开发机设置 ssh forward

可以使用putty,或者cygwinminGW里的ssh命令,我机器上有minGW,执行ssh -v查看。

  • 使用密钥 登陆 : @ win7
1
f:\>ssh root@cpp65 -i C:\Users\Administrator\ .ssh\id_rsa_cpp

登录成功,密钥可用 。

进行 ssh forward @win7 :

1
C:\>ssh -C -N -g -R 7002:localhost:80 root@cpp65 -i C:\Users\Admini strator\.ssh\id_rsa_cpp

这是整个过程中最不好理解的一个步骤,实际上可以看作一个变相的端口映射过程,即将本地的80端口通过ssh映射到远程cpp65的7002端口。这里的localhost指是cpp65而不是本地的win7,也可以修改为其他机器,比如cpp66之类的,只要cpp65能访问到。具体参数参考文章后面的附录

注意,此命令成功后没有任何提示。在@cpp65查看监听端口,可以看到7002端口正在监听。

# netstat -tlnp | grep :7002
tcp        0      0 127.0.0.1:7002              0.0.0.0:*                   LISTEN      9016/sshd
tcp        0      0 ::1:7002                    :::*                        LISTEN      9016/sshd

如果forward失败,提示如下,请检查主机名和登录凭据。

Warning: remote port forwarding failed for listen port 7002

也可使用putty 连接,设置如下:

putty的通道设置

Step3: @cpp65 nginx配置反向代理:

最简单的配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
server{
       	listen  80;
        server_name 65.hihoku.com;
        access_log /hihoku/log/web/65.access.log;


        location / {
                proxy_pass http://127.0.0.1:7002;
                include proxy.conf;
        }


   	}

@cpp65 重启nginx, 此时再访问 http://65.hihoku.com 可以看到开发机的虚拟服务器了。
本机的phpinfo

注意: 由于开发机配置了多个虚拟服务器, 如果@cpp65上直接 访问http://127.0.0.1:7002 可以看到开发机本地按 http://localhost 访问的结果,而非65.hihoku.com

Step4: 验证和接入

登录微信公众帐号平台,进入开发模式

参考:接入指南 - 微信公众平台开发者文档

下载php示例并解压,将php文件改名为wx.php并放在开发机配置的web根目录下,本机为F:/kuaipan/hihoku/65.hihoku.com
wx.phpdefine("TOKEN", "weixin");改为你自己的token。

填写接口配置:

token为你自己在wx.php中定义的 token
url为http://65.hihoku.com/wx.php,提交即可。

Step5: @win7 设置robots协议, 禁止蜘蛛抓取开发机域名下的内容

这是额外的步骤,防止因测试环境与生产环境内容重复破坏主站的SEO

nginx虚拟服务器配置加入以下内容:

if ($host ~ '^65.hihoku.com'){
    rewrite ^/robots.txt$ /robots_deny.txt last;
}

根目录新建以下文件:robots_deny.txt,写入内容:

 User-agent:*
 Disallow:/

重启nginx生效

ssh forward 相关参数的解释:

-f Fork into background after authentication.
后台认证用户/密码,通常和-N连用,不用登录到远程主机。
-L port:host:hostport
将 本地机(客户机)的某个端口转发到远端指定机器的指定端口. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这 个端口上有了连接, 该连接就经过安全通道转发出去, 同时远程主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转 发. 只有 root 才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport
-R port:host:hostport
将 远程主机(服务器)的某个端口转发到本地端指定机器的指定端口. 工作原理是这样的, 远程主机上分配了一个 socket 侦听 port 端口, 一 旦这个端口上有了连接, 该连接就经过安全通道转向出去, 同时本地主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口 的转发. 只有用 root 登录远程主机才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport
-D port
指 定一个本地机器 “动态的’’ 应用程序端口转发. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上 有了连接, 该连接就经过安全通道转发出去, 根据应用程序的协议可以判断出远程主机将和哪里连接. 目前支持 SOCKS4 协议, 将充 当 SOCKS4 服务器. 只有 root 才能转发特权端口. 可以在配置文件中指定动态端口的转发.
-C Enable compression.
压缩数据传输。
-N Do not execute a shell or command.
不执行脚本或命令,通常与-f连用。
-g Allow remote hosts to connect to forwarded ports.
在-L/-R/-D参数中,允许远程主机连接到建立的转发的端口,如果不加这个参数,只允许本地主机建立连接。注:这个参数我在实践中似乎始终不起作用。

参考 :